package day0527;

import javax.swing.*;
import java.util.ArrayList;

public class Test5V2 {
    public static void main(String[] args) {
        //1.窗口  JFrame类 //用JFrame类创建对象，并用win变量来代表此对象
        JFrame win=new JFrame("羊了个羊");//1.
        JPanel pane=new JPanel();//2.  面板 //给面板中添加标签(包含图片)
                                          //给面板上添加按钮
        JLabel label=new JLabel(new ImageIcon("images/背景.jpg"));
        pane.setLayout(null);//取消pane默认布局方式  setLayOut(null)
        label.setSize(480,800);//因为需要给label设置宽高，设置位置
        label.setLocation(0,0);
        pane.add(label);//3.//给面板中添加标签(包含图片)
        ArrayList<JButton>  buttonList=createBtns(6);//buttonList存储96个按钮

        //     96所有按钮   6*7个   x  y  面板
        putBtns(buttonList,0,6,7, 30,100,pane);//从buttonList集合中取出前42个按钮放入到pane面板上
        putBtns(buttonList,42,5,6, 60,133,pane);//从buttonList集合中取出前42个按钮放入到pane面板上
        putBtns(buttonList,72,4,6, 43,166,pane);//从buttonList集合中取出前42个按钮放入到pane面板上
        isCovered(buttonList);///////////////////////////////////////////////////////
        //24
        win.add(pane);//需要给面板中放好所有的内容，再将面板添加到窗口中
        //用win调用setDefaultCloseOperation()方法设置窗口默认的关闭效果
        //如果不调用此方法，关闭窗口时窗口只会隐藏起来
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //用win调用setSize()方法设置窗口宽480像素，高800像素
        win.setSize(480,800);
        //用win调用setLocationRelativeTo()方法设置窗口的相对位置//设置为null就是居中
        win.setLocationRelativeTo(null);
        //用win调用setVisible()方法设置窗口不可改变大小//sizable可改变大小//Resizable//可重新改变大小
        win.setResizable(false);
        //用win调用setVisible()方法设置窗口的可见性// visible可见的
        win.setVisible(true);
    }

    //把16个图片使用count(6)次， 产生96个按钮
    private static ArrayList<JButton> createBtns(int count) {
        //1.imgNames数组存储所有的图片名字
        String[] imgNames={"刷子","剪刀","叉子","奶瓶","干草","手套","树桩",
                "棉花","毛线","水桶","火","玉米","白菜","草","萝卜","铃铛"};
        //2.创建一个ArrayList btnList集合用来存储所有的按钮。//<JButton>用来限制集合中只能存储按钮
        ArrayList<JButton>  btnList=new ArrayList<JButton>();
        for (int j = 0; j < count; j++) {
            //3.用for循环从imgNames数组中取出每个图片名字用来创建按钮并放入到ArrayList btnList中。
            for(int i=0;  i<imgNames.length;  i=i+1){//取出imgNames数组中的每个图片(16个图片)
                String imgName=imgNames[i];//取出数组中的一张图片(用于创建按钮)
                JButton btn=new JButton( new ImageIcon("images/"+imgName+".png"));//创建一个按钮并包含一个图片
                btn.setName(imgName);
                btn.setDisabledIcon(new ImageIcon("images/"+imgName+"2.png"));
                btnList.add(btn);//将按钮btn放入到btnList集合中
            }
        }
        return btnList;
    }

    //从buttonList集合中取出row行col列个按钮放到pane面板的x，y的位置处
    private static void putBtns(ArrayList<JButton> buttonList,int start, int row, int col, int x, int y, JPanel pane) {
        for(int j=0;j<row;j++){//将取7个按钮的代码执行6次， 来取出42个按钮
            for (int i = 0; i < col; i++) {//从buttonList集合中取出7个按钮(第0个到第6个)
                //从buttonList集合中取出第i+ j*7个按钮(上一行的按钮和下一行的按钮编号相差7)
                JButton btn = buttonList.get(start+i+ j*col);
                //用btn调用setLocation()方法修改此按钮的位置
                //横向的第二个按钮比第一个按钮向右多59像素
                //竖向的第二个按钮比上一行对应的按钮向下多67像素
                btn.setLocation(x + 59 * i,     y+67*j);
                btn.setSize(59, 67);//按钮和图片一样大
                pane.add(btn, 0);//0表示把按钮btn放到面板pane的最上边。

            }
        }
    }



    /////////////////////////////////////////
    //ArrayList<JButton> buttonList=new ArrayList<JButton>();
    //求集合中元素个数   buttonList.size()
    private static void isCovered(ArrayList<JButton> buttonList) {
        for (int i = 0; i < buttonList.size()  ; i++) {
            JButton btn=buttonList.get(i);
            btn.setEnabled(true);//在检查btn是否覆盖前，将其设置为可用状态
            //从buttonList集合中取出第i个按钮btn(用于判断btn按钮是否被它后边的所有按钮盖住)
            //用btn按钮的坐标和   btn后边的所有按钮的坐标比较(如果btn按钮被覆盖，就将其设置为不可用)
            for(int j=i+1;  j<buttonList.size(); j++){//for循环用于取出btn后边的所有按钮。
                JButton afterBtn=buttonList.get(j);
                //比较btn的坐标和afterBtn的坐标
                if(   btn.getX()-59< afterBtn.getX() &&  afterBtn.getX()<btn.getX()+59&&
                        btn.getY()-67< afterBtn.getY() && afterBtn.getY()<btn.getY()+67 ){
                    btn.setEnabled(false);//如果btn被afterBtn覆盖，就将btn设置为不可用
                }
            }
        }
    }






}
